package top.jnaw.jee.utils.nim;

import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.StrKit;
import java.util.HashMap;
import java.util.Map;
import top.jnaw.jee.platform.Consts;
import top.jnaw.jee.utils.Https;

/**
 * 对网易云id用户的操作 Created by tudou on 17/11/21 下午4:10.
 */
public class NIMUser {

  /**
   * 第三方帐号导入到网易云通信平台
   *
   * @param accid 网易云通信ID
   * @param name 网易云通信ID昵称,用来PUSH推送时显示的昵称
   * @return token / null
   */
  public static String create(String accid, String name) {
    String token = null;
    final String url = "https://api.netease.im/nimserver/user/create.action";

    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    params.put("name", name);

    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);

    JSONObject json = JSONObject.parseObject(data);
    switch (json.getIntValue("code")) {
      case 200:
        token = json.getJSONObject("info").getString("token");
        break;

      case 414:
        token = refreshToken(accid);
        break;

      default:
        break;
    }

    return token;
  }

  /**
   * 第三方帐号导入到网易云通信平台
   *
   * @param accid 网易云通信ID
   * @param name 网易云通信ID昵称,用来PUSH推送时显示的昵称
   * @param props json属性，第三方可选填，最大长度1024字符
   * @param icon 网易云通信ID头像URL，第三方可选填，最大长度1024
   * @param token 网易云通信ID可以指定登录token值
   * @return token / null
   */
  public static String create(String accid, String name, String props,
      String icon, String token) {

    String rtoken = null;

    final String url = "https://api.netease.im/nimserver/user/create.action";

    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    params.put("name", name);
    params.put("props", props);
    params.put("icon", icon);
    params.put("token", token);

    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);

    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      rtoken = jsonObject.getJSONObject("info").getString("token");
    }
    return rtoken;
  }

  /**
   * 网易云用户修改，token密码？？
   *
   * @param accid 网易云通信ID
   * @param token 网易云通信ID可以指定登录token值
   */

  public static boolean updatePassword(String accid, String token) {
    final String url = "https://api.netease.im/nimserver/user/update.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    params.put("token", token);
    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 重置token密码
   *
   * @param accid 网易云通信ID
   */

  public static String refreshToken(String accid) {

    final String url = "https://api.netease.im/nimserver/user/refreshToken.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);

    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);

    if (jsonObject.getInteger("code") == 200) {
      return jsonObject.getJSONObject("info").getString("token");
    } else {
      return null;
    }
  }


  /**
   * 禁用网易云ID，和users同步 参数
   *
   * @param accid 网易云ID
   * @param needkick 是否需要踢出该用户
   */
  public static boolean blockID(String accid, boolean needkick) {
    final String url = "https://api.netease.im/nimserver/user/block.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    if (needkick) {
      params.put("needkick", "true");
    }
    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 解禁网易云ID，和users同步 参数
   *
   * @param accid 网易云ID
   */
  public static boolean unBlockID(String accid) {
    final String url = "https://api.netease.im/nimserver/user/unblock.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 更改云用户信息
   *
   * @param name 用户名-name
   * @param mobile 手机号
   */
  public static boolean updateUinfo(String accid, String name, String mobile) {
    final String url = "https://api.netease.im/nimserver/user/updateUinfo.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    params.put("name", name);
    if (StrKit.notBlank(mobile)) {
      params.put("mobile", mobile);
    }
    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 设置桌面端在线时，移动端是否需要推送
   *
   * @param donnopOpen true:移动端不需要推送，false:移动端需要推送
   */
  public static boolean setDonnop(String accid, boolean donnopOpen) {
    final String url = "https://api.netease.im/nimserver/user/setDonnop.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    params.put("name", String.valueOf(donnopOpen));

    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 查看用户名片
   */
  public static String getUserInfos(String accids) {
    final String url = "https://api.netease.im/nimserver/user/getUinfos.action";
    Map<String, String> params = new HashMap<>();
    params.put("accids", accids);

    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);

    JSONObject jsonObject = JSONObject.parseObject(data);

    if (jsonObject.getInteger("code") == 200) {
      return jsonObject.toString();
    } else {
      return null;
    }
  }


  /**
   * 添加好友
   *
   * @param faccid 好友的accid
   */
  public static boolean addFriend(String accid, String faccid) {
    final String url = "https://api.netease.im/nimserver/friend/add.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    params.put("faccid", faccid);
    params.put("type", "1");

    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 删除好友
   *
   * @param faccid 好友的accid
   */
  public static boolean delFriend(String accid, String faccid) {
    final String url = "https://api.netease.im/nimserver/friend/delete.action";
    Map<String, String> params = new HashMap<>();
    params.put("accid", accid);
    params.put("faccid", faccid);

    String data = Https
        .post(url, Utils.getHeaders(Consts.NIM_KEY, Consts.NIM_SECRET),
            params);
    JSONObject jsonObject = JSONObject.parseObject(data);
    if (jsonObject.getInteger("code") == 200) {
      return true;
    } else {
      return false;
    }
  }

}
